package cn.xiaobai.enums;

import cn.xiaobai.domain.WhiteInventory;
import cn.xioabai.common.utility.IOUtils;

import java.io.File;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * 枚举共享接口
 *
 * @Author yangdaji
 * @Date 2023/2/27 0027
 * @PackageName cn.xiaobai.enums
 * @ClassName ServerFun
 */
public interface ServerFun {

    /**
     * ip 文件名称
     */
    String ipFileName = "/ip.txt";
    /**
     * 端口文件名称
     */
    String portFileName = "/port.txt";

    /**
     * IP 列表
     */
    Set<String> ipList = new HashSet<>();

    /**
     * 端口列表
     */
    Set<String> portList = new HashSet<>();

    WhiteInventory whiteInventory = new WhiteInventory();


    /**
     * 读取文件数据
     *
     * @param path
     * @param type
     */
    default void readFile(String path, String type) {
        switch (type) {
            case "ip":
                switchFile(path, ipFileName, ipList);
                break;
            case "port":
                switchFile(path, portFileName, portList);
                break;
            default:
                break;
        }
    }

    /**
     * 根据类型选择性读取文件
     *
     * @param path    文件路径
     * @param type    文件类型, ip,port
     * @param dataSet 读取数据集合
     */
    default void switchFile(String path, String type, Set<String> dataSet) {
        File file = Paths.get(path + type).toFile();
        // 判断文件是否存在
        if (file.exists()) {
            String readFileToString = IOUtils.readFileToString(file);
            // 根据逗号进行分割
            String[] strings = readFileToString.split(",");
            addFileToList(strings, dataSet);
        }
    }

    /**
     * 将文件读取的数据加入到集合中
     *
     * @param fileData 文件数据
     * @param dataList 数据集合
     */
    default void addFileToList(String[] fileData, Set<String> dataList) {
        if (fileData.length > 0) {
            dataList.addAll(Arrays.asList(fileData));
        }
    }

    /**
     * 清理数据
     */
    default void clearData() {
        ipList.clear();
        portList.clear();
    }
}
